home *** CD-ROM | disk | FTP | other *** search
Text File | 1996-02-19 | 4.7 KB | 164 lines | [TEXT/CWIE] |
- /*
- File: Debug.c
-
- Contains: support for the debug macros and for write line window
-
- Written by: Bruce Horn, Steve Capps, Larry Kenyon, John Meier, scott douglass, Darin Adler,
- Paul Mercer, Bryan Stearns, Dave Owens
-
- Andy Nicholas
-
- Copyright: © 1988-1995 by Apple Computer, Inc., all rights reserved.
-
- <2> 2/24/95 ga
- */
-
- #ifdef MWTRACEBACKTABLES
- #pragma traceback on
- #endif
-
- #include "Debug.h"
-
- #ifndef DEBUG
-
- #ifdef DEBUGEXPORTED
-
-
- void dbgAssertPrint(const char* fmt, ...)
- {
- }
-
- void dbgAssert(const char* filename, SInt32 line)
- {
- }
-
- void dbgGuard(const char* filename, SInt32 line)
- {
- }
-
- void dbgInvalidPointer(const void* pointer, const char* filename, SInt32 line)
- {
- }
-
- void dbgInvalidHandle(const void** handle, const char* filename, SInt32 line)
- {
- }
-
- #endif // DEBUGEXPORTED
-
- #else // DEBUG
-
- //#include <stdio.h>
- //#include <stdarg.h>
- //#include <string.h>
- // #include <iostream.h>
-
- //
- // For DebugStr and nil
- //
- #include <Types.h>
-
- //
- // For c2pstr
- //
- #include <Strings.h>
-
-
- //#ifndef POWERPC
- //#include <NubDispatch.h>
- //#endif
-
-
- #pragma segment Debug
-
- const char kNewLine = 0x0D;
-
- //----------------------------------------------------------------------------------------
- // dbgAssertPrint:
- //----------------------------------------------------------------------------------------
- void dbgAssertPrint(const char* /*fmt*/, ...)
- {
- #if 0
- char msg[256];
- va_list ap;
- va_start(ap, fmt);
- vsprintf(msg, fmt, ap);
- va_end(ap);
-
- #if 0
- //
- // The cool thing to do would be to use iostream to send
- // debugging information to 'cerr', and have another module
- // elsewhere that redirected cerr to somewhere else (e.g.
- // a debug window, DebugStr, etc.).
- //
- cerr << msg;
- #else
- c2pstr(msg);
-
- #ifdef SIXTYEIGHTK
- if (NubIsInstalled() && NubStartDebuggingMe())
- {
- msg[++msg[0]] = kNewLine; // Add a return character
- SysBreakStr((ConstStr255Param)msg); // ••• change this to SysBreakFunc if you don't want to stop execution
- }
- else
- #endif
- DebugStr((ConstStr255Param)msg);
- #endif
- #endif
- } // dbgAssertPrint
-
- //----------------------------------------------------------------------------------------
- // dbgAssert:
- //----------------------------------------------------------------------------------------
- void dbgAssert(const char* filename, SInt32 line)
- {
- dbgAssertPrint("Assertion failed # %s: %ld", filename, line);
- } // dbgAssert
-
- //----------------------------------------------------------------------------------------
- // dbgGuard:
- //----------------------------------------------------------------------------------------
- void dbgGuard(const char* filename, SInt32 line)
- {
- dbgAssertPrint("Guard failed # %s: %ld", filename, line);
- } // dbgGuard
-
- //----------------------------------------------------------------------------------------
- // dbgInvalidPointer:
- //----------------------------------------------------------------------------------------
- void dbgInvalidPointer(const void* pointer, const char* filename, SInt32 line)
- {
- if(pointer == nil)
- dbgAssertPrint("FATAL ERROR: Nil pointer # %s: %ld", filename, line);
- else if((((UInt32)pointer) & 0x01) != 0)
- dbgAssertPrint("FATAL ERROR: Odd pointer (%x) # %s: %ld", (UInt32)pointer, filename, line);
- else if((*((UInt32*)pointer) == 0xDEADBEEF) || (*((UInt32*)pointer) == 0xBEEFDEAD))
- dbgAssertPrint("FATAL ERROR: Pointer to DEADBEEF (%x->%x) # %s: %ld", (UInt32)pointer, *((UInt32*)pointer), filename, line);
- } // dbgInvalidPointer
-
- //----------------------------------------------------------------------------------------
- // dbgInvalidHandle:
- //
- // I considered trying to use common code in dbgInvalidPointer and dbgInvalidHandle,
- // but different output is required for invalid handles (esp wrt invalid master
- // pointers), so I didn't think it was worth the effort.
- //----------------------------------------------------------------------------------------
- void dbgInvalidHandle(const void** handle, const char* filename, SInt32 line)
- {
- if(handle == nil)
- dbgAssertPrint("FATAL ERROR: Nil handle # %s: %ld", filename, line);
- else if((((UInt32)handle) & 0x01) != 0)
- dbgAssertPrint("FATAL ERROR: Odd handle (%x) # %s: %ld", (UInt32)handle, filename, line);
- else if(*handle == nil)
- dbgAssertPrint("FATAL ERROR: Purged handle (%x->nil) # %s: %ld", (UInt32)handle, filename, line);
- else if(((*((UInt32*)handle)) & 0x01) != 0)
- dbgAssertPrint("FATAL ERROR: Corrupt handle (%x->%x) # %s: %ld", (UInt32)handle, *((UInt32*)handle), filename, line);
- else if((*((UInt32*)(*handle)) == 0xDEADBEEF) || (*((UInt32*)(*handle)) == 0xBEEFDEAD))
- dbgAssertPrint("FATAL ERROR: Handle to DEADBEEF (%x->%x->%x) # %s: %ld", (UInt32)handle, *((UInt32*)handle), **((UInt32**)handle), filename, line);
- } // dbgInvalidHandle
-
- #endif // DEBUG
-
-